package com.william.jdbcplus.core.jdbc;

import com.alibaba.fastjson.JSONArray;
import com.william.jdbcplus.common.page.IPage;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;

public interface IBaseJdbc {
    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回JSON数组
     */
    JSONArray queryToJsonArray(String sql, DataSource ds);

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回LIST
     */
    List<Map<String, Object>> queryToMapList(String sql, DataSource ds);


    /**
     * 获取分页
     *
     * @param page
     * @param sql
     * @param ds
     * @return
     */
    IPage<Map<String, Object>> queryMapPage(IPage<?> page, String sql, DataSource ds);

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回MAP
     */
    Map<String, Object> queryToMap(String sql, DataSource ds);

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回MAP
     */
    <T> T queryEntity(String sql, DataSource ds, Class<T> clazz);

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回MAP
     */
    <T> List<T> queryEntityList(String sql, DataSource ds, Class<T> clazz);

    /**
     * 获取分页
     *
     * @param page
     * @param sql
     * @param ds
     * @return
     */
    <T> IPage<T> queryEntityPage(IPage<?> page, String sql, DataSource ds, Class<T> clazz);


    /**
     * 查询个数
     *
     * @param sql
     * @param ds
     * @return
     */
    Integer queryCount(String sql, DataSource ds);

    /**
     * 执行脚本，会修改数据库
     *
     * @param sql
     * @return 返回影响行数, -1表示失败
     */
    int exec(String sql, DataSource ds);

    /**
     * 批量
     *
     * @param sqlList
     * @param ds
     * @return
     */
    boolean execBatch(List<String> sqlList, DataSource ds);
}
